<?php
/**
 * Classe com funções para carregar e incluir arquivos
 */
class Loader {
    /**
     * Registra funcao de autoload na spl
     *
     * @param user_call $callback
     * @param Bool $register
     * @return Bool
     */
    public static function autoload_register($callback, $register=TRUE)
    {
	if (!$register) {
	    $result = spl_autoload_unregister($callback);
	}

	$result = spl_autoload_register($callback);

	return $result;
    }

    /**
     * Carrega uma classe
     *
     * @param String $class
     * @return Bool
     *
     * @see self::loadFile
     */
    public static function loadClass($class) {
        if (class_exists($class, FALSE) || interface_exists($class, FALSE)) {
	    return;
        }

        $file = strtolower(str_replace('_', '/', $class) . EXT);

        if (!self::loadFile($file)) {
	    return FALSE;
	}

        return TRUE;
    }

    /**
     * Faz include de um arquivo
     *
     * @param String $file
     * @param Bool $once
     * @return mixed Bool True se sucesso, Exception se falhar
     */
    public static function loadFile($file, $once = FALSE)
    {
        if ($once) {
            include_once $file;
	} else {
            include $file;
	}

        return TRUE;
    }

    /**
     * Função de autoload de classes
     *
     * @param String $class
     * @return Bool
     */
    public static function autoload($class) {
	try {
	    @self::loadClass($class);
	} catch (Exception $e) {
	    return FALSE;
	}
    }
}
?>
